// let n: number = 100
// // n = null // 关闭了严格模式
// n = undefined

// let a: void; //void类型只能接收 null 或者 undefined
// a = null;
// a = undefined

function fn(): void { } // 代表这个函数没有任何返回结果


//  never   完整性保证
function f2(): never {
  throw new Error()
}

// function f(x:number|string){
//   if(typeof x == 'number'){
//     return 1
//   }else if(typeof x == 'string'){
//     return ''
//   }else{

//   }

// }

let ele = document.getElementById('#app');
(ele as HTMLElement).style.color = 'red'// 类型断言； ele肯定是一个html元素

let a: number | string;

// ((a! as any) as boolean) // 双重断言

// 字面量类型
type Role = 'super' | "admin" | 'user'
let role: Role = 'admin'

function f3(a: number, b: number): number {
  return a + b
}






f3(1, 2)

type F = (x: string, y: string) => number
let f4 = (a: number, b: number): number => {
  return a + b
}
let f5: F = (a, b) => {
  return 666
}
f5('1', '2')


// 可选参数
let f6 = function (a: string, b?: string): string {
  return a + b
}
f6('q')

// 默认参数
let f7 = function (a: string, b: string = '6'): string {
  return a + b
}
f7('q')

// 剩余参数

let f8 = function (a: string, ...arg: string[]) { }
f8('q', '', '', '', '')



class Person {
  public name: string    // 这个属性是一个谁都可以访问的一个属性  不写默认就是public
  protected age?: number  // 受保护的属性 只有当前类及其子类可以访问
  private sex: number = 0 // 受保护的属性 只有当前类能访问
  readonly height: number = 180
  constructor(name: string, age: number) {
    this.name = name
    this.age = age
    this.sex = 1
    this.height = 888
  }
  f() {
    console.log(this.age)
    console.log(this.sex)
  }
}
class Student extends Person {
  fn() {
    console.log(this.age)
    console.log(this.sex)
  }
}
let p = new Person('qqq', 123)
// p.name = ''
p.sex

export { }
